Multiprocessor programming toolkit for design reuse

ABSTRACT

Techniques for specifying and implementing a software application targeted for execution on a multiprocessor array (MPA). The MPA may include a plurality of processing elements, supporting memory, and a high bandwidth interconnection network (IN), communicatively coupling the plurality of processing elements and supporting memory. In some embodiments, software code may include first program instructions executable to perform a function. In some embodiments, the software code may also include one or more language constructs that are configurable to specify one or more parameter inputs. In some embodiments, the one or more parameter inputs are configurable to specify a set of hardware resources usable to execute the software code. In some embodiments, the hardware resources include multiple processors and may include multiple supporting memories.

PRIORITY CLAIM INFORMATION

This application is a continuation of U.S. patent application Ser. No.14/047,135 titled “Multiprocessor Programming Toolkit for Design Reuse”and filed on Oct. 7, 2013, which claims benefit of priority of U.S.Provisional Application No. 61/722,850, filed on Nov. 6, 2012, and whichare both hereby incorporated by reference in their entirety as thoughfully and completely set forth herein.

The claims in the instant application are different than those of theparent application or other related applications. The Applicanttherefore rescinds any disclaimer of claim scope made in the parentapplication or any predecessor application in relation to the instantapplication. The Examiner is therefore advised that any such previousdisclaimer and the cited references that it was made to avoid, may needto be revisited. Further, any disclaimer made in the instant applicationshould not be read into or against the parent application or otherrelated applications.

FIELD OF THE INVENTION

The field of the invention generally relates to software development fordigital electronic systems and more specifically, to programmingtechniques for multiprocessor arrays.

DESCRIPTION OF THE RELATED ART

Increasingly, digital electronic systems utilize one or moremultiprocessor arrays (MPAs). Examples of digital electronic systemsinclude: computers, digital signal processors (DSP), and these systemsembedded in enclosing equipment, such as radio telephones, governmentservice radios, consumer wireless equipment such as cellphones,smartphones and tablet computers, cellular base station equipment, videoprocessing and broadcast equipment, object recognition equipment,hyper-spectral image data processing, etc.

A MPA may be loosely defined as a plurality of processing elements (PEs)(i.e., processors), supporting memory (SM), and a high bandwidthinterconnection network (IN). The term “array” in the MPA context isused in its broadest sense to mean a plurality of computational units(each containing processing and memory resources) interconnected by anetwork with connections available in one, two, three, or moredimensions, including circular dimensions (loops or rings). Note that ahigher dimensioned MPA can be mapped onto fabrication media with fewerdimensions. For example, a MPA in an IN with the shape of a fourdimensional (4D) hypercube can be mapped onto a 3D stack of siliconintegrated circuit (IC) chips, or onto a single 2D chip, or even a 1Dline of computational units. Also low dimensional MPAs can be mapped tohigher dimensional media. For example, a 1D line of computation unitscan be laid out in a serpentine shape onto the 2D plane of an IC chip,or coiled into a 3D stack of chips. A MPA may contain multiple types ofcomputational units and interspersed arrangements of processors andmemory. Also included in the broad sense of some MPA implementations isa hierarchy or nested arrangement of MPAs, especially a MPA composed ofinterconnected IC chips where the IC chips contain one or more MPAswhich may also have deeper hierarchal structure.

MPAs present new problems and opportunities for software developmentmethods and tools. Since MPAs may extend to thousands of PEs, there is aneed to manage large amounts of software to operate the array, and totest, debug, and rebuild such software in efficient ways. Generally thisrequires modularity, hierarchy, adaptable module re-use, and automatedbuild methods. While these ideas have appeared in conventional softwaredevelopment systems, they have not been integrated into developmenttools in a way that supports generalized modules that may be adaptedstatically and/or dynamically to a different number of PEs and otherresources depending on performance requirements or a different shape ortopology requirement that in turn may depend on resource availability orapplication requirements.

Accordingly, improved techniques and tools for multiprocessor arraysoftware development are desired.

SUMMARY OF THE INVENTION

Various embodiments of techniques for developing software for amultiprocessor array or fabric and its use are provided below. Themultiprocessor fabric may include a plurality of processors and aplurality of communication elements, and may be (generally) homogeneousor heterogeneous, as desired. Each communication element may bedynamically configurable and/or may include a plurality of communicationports, a memory, and/or a routing engine, among other possible elements.Each processor may include means for performing arithmetic logic, aninstruction processing unit, and/or a plurality of processor ports,among other possible elements. The communication elements and processorsmay be coupled together in an interspersed manner. For example, for eachof the processors, a plurality of processor ports may be configured forcoupling to a first subset of the plurality of communication elements,and for each of the communication elements, a first subset ofcommunication ports may be configured for coupling to a subset of theplurality of processors and a second subset of communication ports maybe configured for coupling to a second subset of the plurality ofcommunication elements.

In some embodiments, a software programming language toolkit may specifyand implement a software application targeted for execution on amultiprocessor array (MPA). In one embodiment, software code may includefirst program instructions executable to perform a function. In thisembodiment, the software code may also include one or more languageconstructs that are configurable to specify one or more communicationports and one or more parameter inputs. In this embodiment, the one ormore communication ports are configurable to specify communication withother software code. In this embodiment, the one or more parameterinputs are configurable to specify a set of hardware resources usable toexecute the software code. In this embodiment, the hardware resourcesinclude multiple processors and may include multiple supportingmemories. In this embodiment, instances of the software code aredeployable on an MPA to perform the function in different softwareapplications. Each instance may include configuration of the softwareconstructs. In some embodiments, the one or more parameter inputs may beconfigurable to specify operation of the first function, a data streamsize, an amount of data used to store temporary state, and amount ofcommunication resources, external inputs and/or outputs etc. Thesoftware code may be included on a non-transitory computer-accessiblememory medium.

Various functionality may be implemented as a programming language, oran extension to an existing programming language, e.g., an extension toC or C++, among others. The multiprocessor array may include a pluralityof processing elements, supporting memory, and a high bandwidthinterconnection network (IN), communicatively coupling the plurality ofprocessing elements and supporting memory. A software programminglanguage toolkit may include functions for implementing a cell model(e.g., using the software code embodiment described above), which mayprovide for: cell based hierarchical design, cell reuse, and allocationof physical resources of the MPA. The physical resources may includeprocessing elements, communication resources, and memory. Cells, andthus the allocation of array resources, may be configured or modifiedstatically or dynamically, and thus may provide a highly flexible andeffective tool for configuring software applications for execution onMPAs.

BRIEF DESCRIPTION OF THE DRAWINGS

A better understanding of the present invention can be obtained when thefollowing detailed description of the preferred embodiment is consideredin conjunction with the following drawings, in which:

FIG. 1 illustrates one embodiment of an exemplary development system;

FIGS. 2 and 3 illustrate embodiments of exemplary multiprocessor array(MPA) systems;

FIGS. 4 and 5A are flowcharts illustrating embodiments of softwaredevelopment flow for MPAs;

FIG. 5B is a flowchart illustrating another embodiment of softwaredevelopment flow;

FIG. 6 illustrates a cell hierarchy, according to one embodiment;

FIGS. 7 and 8 illustrate respective parameterized cell hierarchies,according to one embodiment;

FIGS. 9 and 10 illustrate respective physical resource allocations for apair of cells, according to one embodiment; and

FIG. 11 illustrates a view of a cell and a lower-hierarchy cellinstantiated two different ways reflecting different resourceoptimizations, according to one embodiment.

While the invention is susceptible to various modifications andalternative forms, specific embodiments thereof are shown by way ofexample in the drawings and are herein described in detail. It should beunderstood, however, that the drawings and detailed description theretoare not intended to limit the invention to the particular formdisclosed, but on the contrary, the intention is to cover allmodifications, equivalents and alternatives falling within the spiritand scope of the present invention as defined by the appended claims.

The term “configured to” is used herein to connote structure byindicating that the units/circuits/components include structure (e.g.,circuitry) that performs the task or tasks during operation. As such,the unit/circuit/component can be said to be configured to perform thetask even when the specified unit/circuit/component is not currentlyoperational (e.g., is not on). The units/circuits/components used withthe “configured to” language include hardware—for example, circuits,memory storing program instructions executable to implement theoperation, etc. Reciting that a unit/circuit/component is “configuredto” perform one or more tasks is expressly intended not to invoke 35U.S.C. § 112(f) for that unit/circuit/component.

DETAILED DESCRIPTION OF EMBODIMENTS OF THE INVENTION Incorporation byReference

The following patent is hereby incorporated by reference in its entiretyas though fully and completely set forth herein:

U.S. Pat. No. 7,415,594 titled “Processing System with InterspersedStall Propagating Processors and Communication Elements filed on Jun.24, 2003, whose inventors are Michael B. Doerr, William H. Hallidy,David A. Gibson, and Craig M. Chase.

U.S. patent application Ser. No. 13/274,138, titled “DisablingCommunication in a Multiprocessor System”, filed Oct. 14, 2011, whoseinventors are Michael B. Doerr, Carl S. Dobbs, Michael B. Solka, MichaelR Trocino, and David A. Gibson.

Terms

The following is a glossary of terms used in the present application:

Memory Medium—Any of various types of memory devices or storage devices.The term “memory medium” is intended to include an installation medium,e.g., a CD-ROM, floppy disks 104, or tape device; a computer systemmemory or random access memory such as DRAM, DDR RAM, SRAM, EDO RAM,Rambus RAM, etc.; or a non-volatile memory such as a magnetic media,e.g., a hard drive, optical storage, or ROM, EPROM, FLASH, etc. Thememory medium may comprise other types of memory as well, orcombinations thereof. In addition, the memory medium may be located in afirst computer in which the programs are executed, and/or may be locatedin a second different computer which connects to the first computer overa network, such as the Internet. In the latter instance, the secondcomputer may provide program instructions to the first computer forexecution. The term “memory medium” may include two or more memorymediums which may reside in different locations, e.g., in differentcomputers that are connected over a network.

Carrier Medium—a memory medium as described above, as well as a physicaltransmission medium, such as a bus, network, and/or other physicaltransmission medium that conveys signals such as electrical or opticalsignals.

Programmable Hardware Element—includes various hardware devicescomprising multiple programmable function blocks connected via aprogrammable or hardwired interconnect. Examples include FPGAs (FieldProgrammable Gate Arrays), PLDs (Programmable Logic Devices), FPOAs(Field Programmable Object Arrays), and CPLDs (Complex PLDs). Theprogrammable function blocks may range from fine grained (combinatoriallogic or look up tables) to coarse grained (arithmetic logic units orprocessor cores). A programmable hardware element may also be referredto as “reconfigurable logic”.

Application Specific Integrated Circuit (ASIC)—this term is intended tohave the full breadth of its ordinary meaning. The term ASIC is intendedto include an integrated circuit customized for a particularapplication, rather than a general purpose programmable device, althoughASIC may contain programmable processor cores as building blocks. Cellphone cell, MP3 player chip, and many other single-function ICs areexamples of ASICs. An ASIC is usually described in a hardwaredescription language such as Verilog or VHDL.

Program—the term “program” is intended to have the full breadth of itsordinary meaning. The term “program” includes 1) a software programwhich may be stored in a memory and is executable by a processor or 2) ahardware configuration program useable for configuring a programmablehardware element or ASIC.

Software Program—the term “software program” is intended to have thefull breadth of its ordinary meaning, and includes any type of programinstructions, code, script and/or data, or combinations thereof, thatmay be stored in a memory medium and executed by a processor. Exemplarysoftware programs include programs written in text-based programminglanguages, e.g., imperative or procedural languages, such as C, C++,PASCAL, FORTRAN, COBOL, JAVA, assembly language, etc.; graphicalprograms (programs written in graphical programming languages); assemblylanguage programs; programs that have been compiled to machine language;scripts; and other types of executable software. A software program maycomprise two or more software programs that interoperate in some manner.

Hardware Configuration Program—a program, e.g., a netlist or bit file,that can be used to program or configure a programmable hardware elementor ASIC.

Computer System—any of various types of computing or processing systems,including a personal computer system (PC), mainframe computer system,workstation, network appliance, Internet appliance, personal digitalassistant (PDA), grid computing system, or other device or combinationsof devices. In general, the term “computer system” can be broadlydefined to encompass any device (or combination of devices) having atleast one processor that executes instructions from a memory medium.

Automatically—refers to an action or operation performed by a computersystem (e.g., software executed by the computer system) or device (e.g.,circuitry, programmable hardware elements, ASICs, etc.), without userinput directly specifying or performing the action or operation. Thusthe term “automatically” is in contrast to an operation being manuallyperformed or specified by the user, where the user provides input todirectly perform the operation. An automatic procedure may be initiatedby input provided by the user, but the subsequent actions that areperformed “automatically” are not specified by the user, i.e., are notperformed “manually”, where the user specifies each action to perform.For example, a user filling out an electronic form by selecting eachfield and providing input specifying information (e.g., by typinginformation, selecting check boxes, radio selections, etc.) is fillingout the form manually, even though the computer system must update theform in response to the user actions. The form may be automaticallyfilled out by the computer system where the computer system (e.g.,software executing on the computer system) analyzes the fields of theform and fills in the form without any user input specifying the answersto the fields. As indicated above, the user may invoke the automaticfilling of the form, but is not involved in the actual filling of theform (e.g., the user is not manually specifying answers to fields butrather they are being automatically completed). The presentspecification provides various examples of operations beingautomatically performed in response to actions the user has taken.

Development Process—refers to the life-cycle for development based on amethodology. At a coarse level it describes how to drive userrequirements and constraints through design, implementation,verification, deployment, and maintenance.

Processing Element—the term “processing element” (PE) is usedinterchangeably with “processor” and refers to various elements orcombinations of elements configured to execute program instructions.Processing elements include, for example, circuits such as an ASIC(Application Specific Integrated Circuit), entire processor cores,individual processors, and programmable hardware devices such as a fieldprogrammable gate array (FPGA).

Overview

This disclosure initially describes, with reference to FIGS. 1-5A, anoverview of software development for MPAs which may include embodimentsof techniques disclosed herein. It then describes embodiments ofcell-based software development techniques with reference to FIGS.5B-11. Various techniques disclosed herein may allow flexible designre-use in the MPA context.

The following describes various embodiments of a tool or toolkit, suchas a programming language or programming language extension, formultiprocessor array (MPA) software development, including programinstructions or commands specific to design, development, andimplementation of software targeted for execution on MPA systems. A MPAgenerally includes a plurality of processing elements, supportingmemory, and a high bandwidth interconnection network (IN). Other termsused to describe a MPA may include a multiprocessor fabric or amultiprocessor mesh. In some embodiments, a MPA (or fabric/mesh) is aplurality of processors and a plurality of communication elements,coupled to the plurality of processors, where each of the plurality ofcommunication elements includes a memory.

The toolkit may be used to implement modular, hierarchical design reuseof functions executing on multiprocessor arrays, and thus may allow adesigner to create generalized functional cells that can be configuredand used in many different designs (or multiple times in the samedesign) thereby saving the effort needed to manually createsituation-specific versions of the cells. This approach may be referredto herein as a “cell model” (CM), although this terminology is exemplaryonly, and is not intended to limit the approach to any particular form,function, or appearance, and thus any other name or names may be used asdesired. The toolkit may allow configuration of: communication betweencells, an amount of hardware usable to execute cell functionality, cellhierarchy, etc.

It should be noted that the techniques disclosed herein may be used inMPAs of various different array sizes. For example, in one exemplaryembodiment, the MPA may include three or more PEs. In other exemplaryembodiments, the size (number of PEs, supporting memory, and associatedcommunication resources in the array) of the MPA may be greater than orequal to some specified number, which in various different embodimentsmay have any value desired, e.g., 4, 8, 16, 24, 32, 64, etc. Moregenerally, depending on the particular application or use, the number ofPEs in the MPA may have a specified lower bound, which may be specifiedto be any plural value, as desired.

Software Development for MPAs

A software development project is the combination of human and machinework to generate the software that causes some product or service tooperate according to the requirements taken on by the development team.Generally, more design and test automation is beneficial because itallows for more testing of the generated software and thus may eliminatemore bugs.

A software development environment for embedded systems is pictured inFIG. 1. Apart from the human software engineers and programmers, FIG. 1shows three main parts to the development environment: the finalproduct, the workstation, and the test bench. In various embodiments,software code may be configured on a workstation and deployed on a MPA.

In some embodiments, the final product specifies at least a list oftechnical requirements. In some embodiments, a test bench is configuredto generate test pattern inputs for the device under test (DUT) andcapture the outputs of the DUT and compare to known good patterns. Thecloser the DUT matches the final product the higher is the confidencethat the developed software will operate as expected in the finalproduct.

A workstation may be a desktop or laptop computer, for example, with anoperating system (OS) that manages the details of mass storage, adatabase of design data, and a set (or suite) of design tools that readand write the project database. There may be more than one project andmore than one project database and tools and libraries can be sharedbetween them to lower development costs.

Typically, the memory for computers and DSPs is organized in a hierarchywith fast memory at the top and slower but higher capacity memory ateach step down the hierarchy. In some embodiments of a MPA, supportingmemories at the top of the hierarchy are located nearby each PE. In someembodiments, each supporting memory may be specialized to hold onlyinstructions or only data. In other embodiments, supporting memories maystore both instructions and data. Supporting memory for a particular PEmay be private to that PE or shared with other PE.

Further down the memory hierarchy there may be a larger shared memory(e.g., semiconductor SDRAM) with a bit capacity many times larger thanthat of the supporting memory adjacent to each PE. In some embodiments,storage elements such as flash memory, magnetic disks, or optical disksmay be accessible further down the memory hierarchy.

As noted above, a multiprocessor array (MPA) in some embodimentsincludes an array of processing elements (PEs), supporting memories(SMs), and a primary interconnection network (PIN or simply IN) thatsupports high bandwidth data communication among the PEs and/ormemories. Exemplary MPAs are illustrated in FIGS. 2 and 3, describedbelow. In some embodiments, a PE has registers to buffer input data andoutput data, an instruction processing unit (IPU), and means to performarithmetic and logic functions on the data, plus a number of switchesand ports to communicate with other parts of a system. In theseembodiments, the IPU fetches instructions from memory, decodes them, andsets appropriate control signals to move data in and out of the PE andto perform arithmetic and logic functions on the data. PEs suitable forlarge MPAs are often selected or designed to be more energy efficientthan general purpose processors (GPP), because of the large number ofPEs per IC chip that contains a large MPA.

As used herein, the term MPA covers both relatively homogeneous arraysof processors, as well as heterogeneous collections of general purposeand specialized processors that are integrated on so-called “platformIC” chips. Platform IC chips also typically have many kinds of I/Ocircuits to communicate with many different types of other devices.

One example MPA architecture is the HyperX™ architecture discussed inU.S. Pat. No. 7,415,594. In one embodiment of the HyperX™ architecture,a multiprocessor array with a wide range of sizes may be composed of aunit-cell-based hardware fabric (mesh), wherein each cell is referred toas a HyperSlice. The hardware fabric may be formed by arranging theunit-cells on a grid and interconnecting adjacent cells. Each HyperSlicemay include one or more data memory and routers (DMRs) and one or moreprocessing elements (PEs). In U.S. Pat. No. 7,415,594 a DMR is referredto as a dynamically configurable communication (DCC) element, and a PEis referred to as a dynamically configurable processing (DCP) element.In this embodiment, the DMR may provide supporting memory for itsneighboring PEs, as well as routers and links for the interconnectionnetwork (IN).

The hardware fabric may be created by abutting HyperSlices together,which involves aligning the HyperSlices to form correct electricalconnections. These connections include links to DMRs and connections toa power supply grid. The techniques of replicating the HyperSlices,aligning them, and connecting by abutment are well understood techniquesof very large scale integration (VLSI) of integrated circuits (IC)chips, especially ICs fabricated with complementary metal oxidesemiconductor (CMOS) circuit technology. In this embodiment, thehardware fabric has a PIN that operates independently and transparentlyto the processing elements, and may provide on-demand bandwidth throughan ensemble of real-time programmable and adaptable communicationpathways (which may be referred to as routes or channels) betweenHyperSlices supporting arbitrary communication network topologies.Coordinated groups of HyperSlices may be formed and reformed“on-the-fly” under software control. This ability to dynamically alterthe amount of hardware used to evaluate a function may allow forefficient or optimal application of hardware resources to relieveprocessing bottlenecks. At the edge of the hardware fabric, links mayconnect to circuits specialized for types of memory that are furtherdown the memory hierarchy, or for I/O at the edge of an integratedcircuit (IC) chip.

The interconnected DMRs may provide nearest-neighbor, regional, andglobal communication across the chip and from chip to chip. Each ofthese communication modes may physically use the DMR resources to senddata/messages differently depending on locality of data and softwarealgorithm requirements. A “Quick Port” facility may be provided tosupport low latency transfer of one or more words of data from aprocessor to any network destination. For block transfers, Direct MemoryAccess (DMA) engines within the DMR may be available to manage themovement of data across the memory and routing fabric. Fornearest-neighbor communication between PEs, the use of shared memoryand/or registers may be the most efficient method of data movement. Forregional and global data movement, using the routing fabric (the PIN)may be the most efficient method. Communication pathways (or routes) caneither be dynamic or static. Dynamic routes may be set up for datatransfer and torn down upon the completion of the transfer to free upPIN resources for other routes and data transfers. Static routes mayremain in place throughout the program execution and are primarily usedfor high priority and critical communications. The physical location ofcommunication pathways and the timing of data transfers across them maybe under software program control. Multiple communication pathways mayexist to support simultaneous data transfer between any senders andreceivers.

The architecture of the DMR may allow different interchangeable PEs tobe used in a multiprocessor fabric to optimize the system for specificapplications. A HyperX™ multiprocessor system may comprise either aheterogeneous or homogeneous array of PEs. A PE may be a conventionalprocessor, or alternatively a PE may not conform to the conventionaldefinition of a processor. A PE may simply be a collection of logicgates serving as a hard-wired processor for certain logic functionswhere programmability is traded off for higher performance, smallerarea, and/or lower power.

FIG. 2 illustrates a view of the network of processing elements (PE's)and Data Memory Routers (DMRs) of one exemplary embodiment of a HyperX™system. The PE's are shown as rectangular blocks and the DMRs are shownas circles. The routing channels between DMRs are shown as dotted lines.In the illustrated embodiment, solid triangles show off-meshcommunication (which may also be referred to as chip inputs and/oroutputs) and solid lines show active data communication between DMRs. Acomputational task is shown by its numerical identifier and is placed onthe PE that is executing it. A data variable being used forcommunication is shown by its name and is placed on the DMR thatcontains it. In the illustrated example, the top left PE has beenassigned a task with task ID 62, and may communicate with other PEs ormemory via the respective DMRs adjacent to the PE, designated bycommunication path variables t, w, and u. As also shown, in thisembodiment, an active communication channel connects a PE designated 71(e.g., another task ID) to an off-mesh communication path or port. Insome embodiments, PEs may communicate with each other using both sharedvariables (e.g., using neighboring DMRs) and message passing along theIN. In various embodiments, software modules developed according to thetechniques disclosed herein may be deployed on portions of theillustrated network.

FIG. 3 illustrates an exemplary multiprocessor system implemented on achip. As shown, the chip includes multiple I/O routers for communicationwith off-chip devices, as well as an interior multiprocessor fabric,similar to the exemplary system of FIG. 2. A HyperX™ processorarchitecture may include inherent multi-dimensionality, but may beimplemented physically in a planar realization as shown. The processorarchitecture may have high energy-efficient characteristics and may alsobe fundamentally scalable (to large arrays) and reliable—representingboth low-power and dependable notions. Aspects that enable the processorarchitecture to achieve this performance include the streamlinedprocessors, memory-network, and flexible IO. In some embodiments, theprocessing elements (PEs) may be full-fledged DSP/GPPs and based on amemory to memory (cacheless) architecture sustained by a variable widthinstruction word instruction set architecture that may dynamicallyexpand the execution pipeline to maintain throughput whilesimultaneously maximizing use of hardware resources.

In the illustrated embodiment, the multiprocessor system includes MPAinputs/outputs which may be used to communicate with general-purposeoff-mesh memory (e.g., one or more DRAMs in one embodiment) and/or otherperipherals.

Software is the ensemble of instructions (also called program code) thatis required to operate a computer or other stored-program device.Software can be categorized according to its use. Software that operatesa computer for an end user for a specific use (such as word processing,web surfing, video or cell phone signal processing, etc.) may be termedapplication software. Application software includes the source programand scripts written by human programmers, a variety of intermediatecompiled forms, and the final form called run time software may beexecuted by the target device (PE, microprocessor, or CPU). Run timesoftware may also be executed by an emulator which is a device designedto provide more visibility into the internal states of the target devicethan the actual target device for the purposes of debugging (errorelimination).

Development software (a group or suite of software development tools) issoftware used to generate application software. Basic development toolsinclude a compiler, an assembler, and a linker, as indicated in FIG. 4,which illustrates an exemplary software design and development flow fora MPA based system. An editor whereby a user writes source code may alsobe considered to be a basic development tool. A human engineer orprogrammer typically designs a program and translates it to source code,represented by the documents of FIG. 4 labeled “a complete design”,which may be created via a program editor. In the block labeled“language compilation/assembly”, a compiler is used to translate sourcecode into modular address-relocatable object code; an assembler is thenused to create modular machine code; and finally, a linker is used tocreate an executable binary image of the entire program. This process ofcompiling, assembling, and linking (making a binary image), labeled“process the design to create chip programming files,” may be automatedwith instructions to the operating system stored in “make files”. Totest the program, the binary image is typically loaded into the memoryof the target device, represented in FIG. 4 by the provision andimplementation of “chip programming information” to a “processor ICchip”, i.e., “program the chip”, and executed (i.e., “run the program”).Other common software tools include a debugger (to load, start, pause,dump, and disassemble the binary image from the target PE), andcycle-accurate simulators. Cycle accurate simulators provide completevisibility into the processor internal states but they run much slowerthan the target hardware, e.g., by factors of 10000 to a million.

For multiprocessors systems there is an important extra step compared toa single processor system, which is the allocation of particularprocessing tasks or modules to particular physical hardwareresources—such as PEs and the communication resources between and amongPEs and system I/O ports. Note that resource allocation may includeallocation of data variables onto memory resources, because allocationof shared and localized memory may have an impact on allocation of thePE and communication resources, and vice versa. In FIG. 4 this extrastep is represented by the block labeled Resource Allocation (which mayalso be referred to as physical design). The resource allocation part ofthe flow may utilize a placement and routing tool, which may be used toassign tasks to particular PE in the array, and to select specific portsand communication pathways in the IN. These communication pathways maybe static after creation or dynamically changing during the softwareexecution. When dynamic pathways are routed and torn down during normaloperation, the optimization of the system can include the time dimensionas well as space dimensions. Additionally, optimization of the systemmay be influenced by system constraints, e.g. run-time latency, delay,power dissipation, data processing dependencies, etc. Thus, theoptimization of such systems may be a multi-dimensional optimization.

FIG. 5A illustrates a more detailed exemplary software design data flow.As may be seen, a third party system development tool is generally usedto create a program, e.g., an ANSI-C program, which is compiled,assembled, and linked, to generate an image (binary executable). As alsoshown, the results of the compilation may be further utilized tooptimize the software in light of the target hardware. Morespecifically, task extraction, multi-dimensional optimization (mentionedabove), and resource assignment/allocation may be performed based onsystem constraints and the target hardware product, e.g., a HyperX™hardware product, as indicated. As shown, this process may be iterativein nature.

When few processors are involved, the physical design (the assignment ofapplication software tasks to physical locations and the specificrouting of communication pathways) may be relatively simple and may bedone manually. Even so, the work load of each processor may varydramatically over time, so that some form of dynamic allocation may bedesirable to maximize throughput. Further, for MPAs with large numbersof PEs, the physical design process can be tedious and error prone ifdone manually. To address these issues software development tools formultiprocessor systems may define tasks (blocks of program code) andcommunication requirements (source and destination for each pathway) andautomatically allocate resources to tasks (place and route). If a designis large or contains many repeated tasks it may be more manageable ifexpressed as a hierarchy of cells. However, a hierarchical descriptionwill generally have to be flattened into a list of all the tasks and allthe communication pathways that are required at run time before theplace and route tools can be used to complete the physical design.

The idea of hierarchical, configurable cells has been used in the areaof Hardware Description Languages (HDLs). Hierarchical configurabilityis built into commonly used HDLs such as Verilog and VHDL. However,those methods are oriented toward creating designs that are implementedin logical gates and are not usually utilized in a multiprocessor array.The major differences are the models of computation used in each domain.In the HDL model, all the computation resources typically default toconcurrent execution, but can be specified for sequential execution. Themultiprocessor model typically assumes a restricted number of streams ofparallel computation, each of which may follow a sequential executionmodel.

Such HDLs have no representations of the unique properties ofmultiprocessor arrays, e.g., unique or shared memory spaces, unique orshared synchronization resources, or sets of processor specific machineinstructions. In contrast, software languages for multiprocessorstypically include representations of these features.

In the field of software languages, function configurability has beenutilized for some time. However, prior art software programminglanguages do not support programming reusability (of both fixed andreconfigurable cells) and managing design complexity with hierarchicaldecomposition. For example, the construct known as “templates” in C++allows a function to be specialized for a particular use; however, therange of parameterization is limited to the data types of its argumentsand does not allow changes in the parallel implementation of thecomputation, e.g., on a MPA.

Cell-Based Development Overview

In some embodiments, the cell model may enable the encapsulation andparameterization of parallel implementation of a function, which mayallow the amount of parallelism employed in any particular use of thefunction to be expanded or contracted to fit the environment in which itis being used. For example, the techniques disclosed herein may allowthe utilization of more hardware resources (through more parallelism) toconstruct a higher performance version of the cell.

In some embodiments, the cell model may allow the cell to operate onmemory and synchronization resources that are defined external to thecell, and thus can be shared with other cells. This may further enablecell reuse because the cell can be shrunk to only encompass keyfunctionality, and simpler and more functionally pure cells are easierto reuse. Generally, the cell model may include software constructs thatallow specification of connectivity between a cell and other cellsand/or an amount of communication resources available to a given cell.

The resource allocation of a cell on a MPA may also be sensitive toparameters. For example, a cell may be designed with a parameter thatmay determine whether it was laid out linearly or in a rectangular form.As another example, the parameter may represent a bounding box of theresources onto which the cell is designed to be allocated.

In some embodiments, parameters may be configurable to change operationof the function of a cell. For example, one some embodiments a parametermay be used to configure how many iterations of a process to run or seta convergence criterion for completion of a process. In anotherembodiment a parameter may be configurable to completely change thefunction of a cell, e.g., by selecting among a number of differentalgorithms available in the cell.

In some embodiments, the cell model may also be used to dynamicallychange the resources the cell is using as it is executing, e.g., bydynamically changing the amount of resources being used and/or changingthe specific set of resources that are being used. For example, based onchanging load conditions the cell may use more processors to completecomputations in a timely manner. Another example is to change the amountof data used to store temporary state during computations based on thesize of the data that is being communicated to the cell. A furtherexample is to use more communication resources to more quickly get thedata into the cell. Further, parameters may be used to provide a cellaccess to MPA inputs and/or outputs as well as one or more systemmemories external to the MPA.

In some embodiments, the allocation of the resources used by aparticular cell may be changed dynamically, e.g., when a cell expands itneeds to allocate its additional resources onto the multiprocessorarray. As another example, if a neighboring cell needs to expand and usemore resources, the cell may minimize the resources it is using, orre-allocate the set of resources it is using in order to give theneighboring cell more room.

The programming language extensions disclosed herein, which may bereferred to as “Multiprocessor Programming Language Extensions forDesign Reuse (MPPLEDR)”, may address design reuse and scalability tolarge numbers of PE. In various embodiments, the basis of scalability isa cell-based hierarchy approach in which parameterized cells may bedesigned and stored in one or more libraries for customizable re-useacross many projects.

Exemplary programming constructs or programming language extensionsdisclosed herein are presented as an extension to the C language;however, it should be noted that other programming languages may beextended or defined in similar fashion, e.g., C++, Java, FORTRAN, and soforth, and that the C language based embodiments disclosed herein aremeant to be exemplary only, and are not intended to limit theprogramming languages considered to any particular set of programminglanguages. In some embodiments, the programming language or programminglanguage extensions disclosed may be used to create and instantiatecells.

Moreover, in some embodiments, the techniques disclosed herein mayprovide or facilitate a tool flow that implements the cells andinstantiations onto a multiprocessor array. In the description below, acell created with the present techniques, e.g., language extension, istermed a “generalized cell.” The generalized cells may be hierarchical,i.e., able to utilize other generalized cells as part of theirdefinition, and the configuration of the sub-cells may be modified bythe configuration of the parent cell.

FIG. 5B shows a flowchart illustrating one embodiment of a method forcell-based software development. In some embodiments, the steps of FIG.5B may be performed as part of the processes of FIGS. 4 and 5A. Themethod shown in FIG. 5B may be used in conjunction with any of thecomputer systems, devices, elements, or components disclosed herein,among other devices. In various embodiments, some of the method elementsshown may be performed concurrently, in a different order than shown, ormay be omitted. Additional method elements may also be performed asdesired. Flow begins at block 510.

At block 510, a cell type or definition is created for a particularfunction. The particular function may be any of various functions suchas a mathematical transform, for example. In this embodiment, the celltype includes one or more language constructs that are configurable tospecify at least (1) communication with other software code and (2) oneor more parameters. Exemplary software constructs are discussed withreference to code examples below. Creation of the cell type may beperformed by a software developer for a particular application or aspart of a library of cell types, for example, which may be available forcreating various applications. In some embodiments, cell types ordefinitions may be created that do not include a particular function,but merely act as wrappers for other cells, for example. Flow proceedsto block 520.

At block 520, an instantiation of the cell is created. This step may beperformed when writing a particular software application. The softwareapplication may include multiple cells of the same or of different typesand may or may not include other software that does not conform to thecell model. In this embodiment, instantiating the cell includesspecifying communication of the cell with the software application andspecifying a set of hardware resources usable to perform the particularfunction. Specifying communication may include specifying communicationwith other cells and/or placement of a cell within other cells. In someembodiments, the software constructs may define communication ports. Inone embodiment, the communication ports include one or more fabric ports(e.g., to an IN) and one of more shared memory ports (e.g. forcommunication using shared variables in a memory available to multiplePEs). Specifying communication may include specifying connections forsuch ports.

In some embodiments, creating a cell type (e.g., as in step 510) mayinclude defining different hardware configurations for deployment of thecells. In these embodiments, specifying the set of hardware resourcesusable to perform the particular function may include providing aparameter in the cell instantiation that selects one of the definedhardware configurations. In other embodiments, specifying the set ofhardware resources may not be based on a pre-defined configuration, butmay define the set of hardware resources using parameters (e.g., byspecifying a number of processors, communication resources, etc.). Flowproceeds to block 530.

At block 530, the instantiated cell is deployed on a multiprocessorarray with the software application. This may include storing dataand/or instructions on one or more memories and/or PEs that are part ofthe set of hardware resources and assigning PEs for execution ofinstructions to perform the particular functionality. Flow proceeds toblock 540.

At block 540, the particular function is executed on the MPA. Executionof the particular function may have different performancecharacteristics depending on the amount of hardware resources specifiedin step 520. Further, assignment of hardware resources to the cell maybe adjusted dynamically. In some embodiments, dynamic adjustment may bebased on information from other cells (e.g., neighboring cells on theMPA) about their use of hardware resources. Thus, the cell may also beconfigured to communicate its resource usage to other cells. Flow endsat block 540.

FIG. 6 illustrates an exemplary hierarchy of cells, according to oneembodiment, in which a cell A includes and uses cells B (two instances),C, and D, and where cell C includes and utilizes cell D (fourinstances). Such modular hierarchies may facilitate complex functionaland architectural schemes, as well as module reuse. Such hierarchies ofgeneralized cells facilitate highly configurable solutions forparallelizing execution of software applications on MPAs.

For example, FIG. 7 illustrates an exemplary cell hierarchy comprisingcell A, cell B, cell C, cell D, and cell E. Cell B is an example of aparameterized cell, and is parameterized to include two sub cells, inthis case, two instances of cell E. FIG. 8 illustrates a modifiedversion of the cell hierarchy of FIG. 7, according to one embodiment. Asmay be seen, in this example, cell B has been parameterized to includefour sub cells, specifically, four instances of cell E, therebyproviding increased parallelism of cell B's tasks via additional subcells. In other embodiments, a sub cells tasks may be parallelized byconfigured hardware resources available to a particular sub cell, usinga parameter for example. In some embodiments, a parameter configurableto change the number of sub cells in Cell B may be numeric, e.g.,indicating the number of instances of Cell E to include. In otherembodiments, a parameter configurable to change the number of sub cellsin Cell B may indicate or reference an instance or type of Cell E (e.g.,Cell B may not include information associated with Cell E, but thisinformation may be passed as a parameter). In some embodiments, a cellmay not include code indicating any particular functionality, but mayserve as a wrapper for other cells that may be plugged in to performdifferent configurable functionalities.

The configuration or parameterization of the generalized cell may beused to configure or modify the logical and/or functional operation ofthe cell. A generalized cell may utilize zero or more processors in themultiprocessor array, and the cell configuration information may changethe number of processors that the cell utilizes. Similarly, ageneralized cell may utilize zero or more components of the primaryinterconnection array and the cell configuration information may changethe number of components of the interconnection network (IN) that thecell utilizes. Similarly, a generalized cell may utilize zero or morestorage locations in the MPA's supporting memory and the cellconfiguration information may change the number of storage locationsthat the cell utilizes.

The definition of the generalized cell may also include information thatcontrols the physical realization of the cell, and the physicalrealization may be modified by changing the configuration. The physicalrealization may, for example, include the exact or relative processorsused, the methods and realization of processor-to-processorcommunication, and the location of the functional variables in the arraymemory or memories.

FIGS. 9 and 10 illustrate two cells (cells A and B) physically occupyingrespective parts of a MPA. In these figures the area of the each cell isintended to represent the processing and/or memory resources used. Morespecifically, FIG. 9 illustrates respective resource usage for cell Aand cell B according to a first configuration (or parameterization),where, as may be seen, cell B utilizes more of the multiprocessor arrayresources than cell A. FIG. 10 illustrates respective resource usage forcell A and cell B according to a second configuration (orparameterization), in which resources for the cells of FIG. 9 have beenre-allocated such that cell A changes shape and location when cell Bexpands. Note that in this new configuration, cell B utilizes much moreof the multiprocessor array resources than cell A, and substantiallymore than Cell B with the configuration of FIG. 9. This re-allocationmay be dynamic (e.g., while a software application that contains cell'sA and B is executing) or may be performed during development of aprogram (e.g., cells A and B may be deployed using different amounts ofhardware resources in different applications).

In one embodiment, language construct or parameters may allow a cell toshare memory or synchronization resources (e.g., semaphores) withneighboring cells or functions running on neighboring processors. Itshould be noted that the techniques disclosed herein, includingembodiments of the cell model and its use, applies to any of various MPAarchitectures, both homogeneous and heterogeneous.

Exemplary Embodiments and Implementations

The following describes various exemplary embodiments andimplementations of the techniques disclosed herein. However, it shouldbe noted that the particular embodiments and techniques described do notlimit the invention to any particular form, function, or appearance. Forexample, some of the embodiments are described in terms of an extensionto the C programming language, with C-type data structures, syntax, andspecific function, structure, or element names; however, the techniquesdescribed may be implemented in or as any of various programminglanguages (or extensions to such languages), may use any syntax andnames, as desired.

Cells

A generalized cell may be defined for scalable hierarchical designs onMPAs. The basis of scalability is a cell-based hierarchy approach inwhich parameterized cells may be designed and stored in one or morelibraries, sets, or collections, for customizable re-use across manyprojects, in some embodiments.

Cells may be components used to build a hierarchical design. A cell mayinclude one or more tasks or functions as well as instances of othercells. Cells may implement an abstract functionality which can be assimple as a pass-thorough (one input, one output communicationstructure) or as complex as (or more complex than) a matrixmultiplication or Viterbi decoder, for example.

In one embodiment, a cell may have two major parts: a cell definitionand a view. The multiprocessor cell definition construct may define thecell name and an ordered list of port and parameter names and theirtypes. Ports are the channels for communication of data between the celland other cells or the outside world. Parameters configure the cell andare bound to constant values when the cell is instantiated.

In one embodiment, an exemplary cell definition construct may be definedaccording to the following syntax:

  mp_celldef cellname {   mpx_param int P;   mpx_input in;   mpx_outputout;   mpx_shared int sharedvar; }

As may be seen, the above exemplary cell definition constructmpx_celldef includes the cell name and a list of the cell's ports andparameters.

Views

A view (which may have a different name as desired) may be defined by aview definition, e.g., using a view definition construct, e.g., mpx_viewconstruct. The view definition construct may define the view name,tasks, and possibly instantiation of other cells. More generally, a viewmay define the body of the cell, and may contain leaf tasks. A view mayalso contain instances of other cells. In some embodiments, a cell canhave multiple views. Each view of a cell may be independent of any otherviews.

Views provide the cell's functionality, and can be implemented indifferent ways depending upon the system requirements. Reasons fordifferent implementations may include, but are not limited to, latencyand throughput requirements, PE instruction memory availability, DMRdata memory availability, and routing congestion, among others.

Thus, different implementations of the cell may be defined as views,using a view definition construct, e.g., mpx_view. Each viewimplementation or instance may have its own file. In one embodiment, anexemplary view definition construct may be defined according to thefollowing syntax:

  mpx_view viewname( ) {  if (MPX_RANK == 0) {   // code...  } }

The terms “rank” and “MPX_PARALLEL” (mentioned below) are particularsemantics of an exemplary implementation of the hierarchicalfunctionality of the present techniques. Per the definitions usedherein, cells may have functionality and instantiate other cells.Functionality may be created through tasks, and other cells may beinstantiated using the MPX_PARALLEL construct. As used herein, a task isa piece of functionality, e.g., a function, block of code, or set ofprogram instructions, that is executed on a processor, and rank is anassigned unique identifier for the task. Tasks may, by default, executeconcurrently with all other tasks executing on other processors. If morethan one task is assigned to the same processor, provisions may be madeto execute the multiple tasks on the processor—extensive art existsdescribing multi-tasking mechanisms. A special rank identifier,MPX_PARALLEL, provides a convenient syntactic means of importing othercells and all their tasks into the current view, thereby instantiatingseparately defined sets of multiple tasks collectively declared as cellsin this embodiment. Said in a slightly different way, a task is a pieceof functionality that is executed on a processor, and rank is a means ofcreating different tasks for instantiated cells depending upon theparticular processor where they are eventually located. An MPX_PARALLELrank is a special rank in which other cells are instantiated. It shouldbe noted, however, that the term “rank” may not only apply toMPX_PARALLEL (or functional equivalents); rather, in some embodiments, arank may be a serial task or a block of parallel cell instances. In thisembodiment, the predefined rank symbol MPX_PARALLEL specifies that thestatements contained within are concurrent statements and not serialstatements.

It should be noted that in some embodiments, the hierarchical system maybe implemented without any tasks, but only instantiations of other cells

Ports

Communications between tasks in the view and tasks that are outside ofthe view may be configured using the port interface. In one embodiment,a cell's port interface may declare two types of ports: comm ports anddata ports.

In one embodiment, comm (short for communication path) ports may bedeclared with input, output, or port types, e.g., mpx_input, mpx_output,or mpx_port. Comm ports may be used for fabric communications while dataports may be used for shared variable communication, in someembodiments. Comm ports may be used for routed communications such asDMA transfers. In one embodiment, comm port types (e.g., mpx_port,mpx_input, mpx_output) may only be used in declarations of celldefinitions (mpx_celldef), and may not be used to declare local orglobal variables or to declare function parameters. In some embodiments,arrays of comm ports may also be supported.

For example, an array of input comm ports may be declared according tothe following exemplary syntax in one embodiment:

  mpx_celldef cellname {  mpx_input in[ SIZE ];  mpx_output out; };

Note that in some embodiments, the declared size of an array port may berequired to be a constant or a previously declared parameter, i.e., ageneral variable may not be allowed.

In some embodiments, data ports may be declared with type qualifiersshared or semaphore, e.g., mpx_shared or mpx_semaphore, and mayassociate a shared variable or semaphore that is declared external tothe cell with a local port symbol. Tasks in the cell's view mayreference the port symbol to directly access the shared variable orsemaphore.

Note that in some embodiments, the non-direction-specific mpx_port (orfunctional equivalent) may be supported. The final direction may bechosen by the implementation system. The scope of ports may be globalwithin the cell declared using mpx_celldef (or functional equivalent).Ports may not need to be passed as parameters to functions called withinthe cell. In one embodiment, to be able to reference ports, the functionmay be required to be in the same file as the mpx_celldef. Cell portsmay be used as a comm ID in send and receive APIs.

The exemplary type qualifiers mpx_shared or mpx_semaphore may declaredata ports when used in an mpx_celldef declaration. A data port mayprovide access to a variable that is declared outside the cell. Thedeclaration may be required have global scope, and so may not be allowedto be inside a function, cell definition (e.g., mpx_celldef ormpx_cell), or implementation (e.g., mpx_view).

The following illustrates an exemplary required external declarationaccording to one embodiment:

   extern mpx_celldef cellA {   mpx_input in;   mpx_output out;  mpx_shared int shv; }; mpx_shared int shared Var = 0; main( ) {   //...   if (MPX_RANK == MPX_PARALLEL) {    U1: cellA( 1000, 2000,sharedVar );   } }

In this examples, sharedVar is declared externally to the functionalityor definition of cell A. Actual comm. symbols and shared variablesassociated with a cell instantiation may match the port positions in theformal cell definition. In the example above, a comm. with identifier1000 is associated with the input comm. port “in”, 2000 is associatedwith output comm port “out”, and sharedVar is associated with the sharedvariable data port “shv”. In another embodiment, the ports andparameters may be matched by name to the comm IDs and parameter valuesin the instantiation.

A variable declared with qualifier mpx_semaphore (or functionalequivalent) may be used as a semaphore for controlling mutual exclusiveaccess of shared resources. Semaphore variables, in some embodiments,whether declared as variables or data ports, may only be set using theMPX_Lock and MPX_Unlock functions (or functional equivalents) and maynot be passed as parameters to other functions. Note that the techniquesdisclosed herein are not limited to any particular implementation of asemaphore; for example, in some embodiments, fetch and incrementinstructions may be utilized.

Example: Shared Memory

The following is an exemplary set of declarations regarding sharedmemory, according to one embodiment.

  File: main.c extern mpx_celldef cellA {  mpx_input in; mpx_output out;  mpx_shared int shv; }; mpx_shared int shared Var = 0;main( ) {  if (MPX_RANK == 0) {   while ( sharedVar != 0)    MPX_Nop(1);  shared Var = 1;   ...  }  if (MPX_RANK == MPX_PARALLEL) {   U1: cellA(1000, 2000, sharedVar );  } } File: cellA.c mpx_celldef cellA { mpx_input in;  mpx_output out;  mpx_shared int shv; };mpx_view_cellA_view( ) {  if (MPX_RANK == 0) {   while ( shv != 1)   MPX_Nop(1);   shv = 2;   ...  } }

In the above declarations, the ports in and out are comm ports, and shvis a data port. Within cellA, shv is a reference to the shared variabledeclared and owned outside of the cell as sharedVar in main.c.

In some embodiments, data ports may be passed through multiple levels ofthe cell hierarchy. For example, the following instantiation of cellBwithin the viewA implementation of cellA passes shA through. Note thatthe shared variable sizes match in this example.

  extern mpx_celldef cellB {  mpx_input inportB;  mpx_output outportB; mpx_shared int shB[ SIZE ]; }; mpx_celldef cellA{  mpx_input inportA; mpx_shared int shA[ SIZE ]; }; mpx_view viewA() {   ...  if ( MPX_RANK== MPX_PARALLEL ){   UB: cellB( comm1, comm2, shA );  } }

Exemplary Cell Parameters

As noted above, cells may be parameterized. The following presentsembodiments using an exemplary implementation using C-style languageconstructs.

A parameterized cell may have mpx_param declarations in its interfacedefinition. The following is an exemplary declaration of cellparameters:

  mpx_celldef cell {  mpx_param int M;  mpx_param int N;  mpx_paramfloat F;  mpx_input IN;  mpx_output OUT; };

In one exemplary embodiment, declarations of cell parameters may berequired to appear within the mpx_celldef (or functional equivalent)definition. A parameter may be required to be declared before its use insome embodiments.

In some embodiments, a parameter may be used to size a cell port or anarray variable declared in the file global scope (i.e. a task-globalvariable or a shared variable), as indicated by the following exemplarydeclaration that uses parameters to size ports:

  mpx_celldef cell {  mpx_param int M;  mpx_param int N;  mpx_paramfloat F;  mpx_input P[N+1];  mpx_shared int A[N];  mpx_output OUT; };int arr[N]; mpx_shared int sharr[N];

A parameter may affect the number (quantity) and/or selection of tasksand/or cell instances, as illustrated in the following example:

  mpx_view viewA( ) {  if (MPX_RANK >= 0 && MPX RANK < M) {   ...  }  if(MPX_RANK == MPX_PARALLEL) {   if (N == 2) {    U1: kernel(...);    U2:kernel(...);   } else if (N == 4) {    U3: kernel(...);    U4:kernel(...);    U5: kernel(...);    U6: kernel(...);   }  }

In some embodiments, a parameter may be used in a loop to generateinstances, as illustrated in the following example:

  mpx_view viewA( ) {  if (MPX_RANK == MPX_PARALLEL) {   int i;   for (i= 0; i < N; i++) {    U: kernel(COMM+i, COMM+i+1);   }  } }

In this example, the loop may be unrolled, the comm. id expressionsevaluated and instance labels generated, e.g., by the programmingtoolkit.

For ease of discussion, a parameter that sizes ports or variables orcontrols task or instance selection/generation may be referred to as astructural parameter.

A parameter may affect a view functionally such as selection ofcomputation, task, or function, and in general may be used inexpressions in situations a constant variable may be used. Such uses ofa parameter may not impact structure. The following is an exemplary useof parameters to control a computation:

  mpx_view viewA( ) {  if (MPX_RANK == 0) {   if (M <= 2) {    <somecomputation>   }else {    <other computation>   }  } }

Ranks

In some embodiments, a rank is a scope or block containing a list ofstatements. The statements may be serial or concurrent. A rank thatcontains serial statements may execute directly on a processor in theMPA. A rank that contains concurrent statements may containinstantiations of cells. Each of the concurrent statements may be ahierarchical call of the ranks of that instantiated cell.

Exemplary Cell Instantiation

In some embodiments, to use a cell, it must be instantiated.Syntactically, this may resemble a function call but semantically thetwo concepts may be very different. A cell instantiation is a parallelconstruct that (in some embodiments) can only occur within a specialrank, e.g., called MPX_PARALLEL. In some embodiments, the list ofarguments passed to the cell instantiation may correspond to the cell'sports in the order defined by the cell interface definition.

In one embodiment, the following may be passed via a cell's interface:

constant comm id;

comm port of the parent cell;

name of an array variable declared with const MPX_Comm_t;

shared or semaphore variable declared in the parent cell;

data port of the parent cell; and

cell parameters.

Parameter Passing

When a parameterized cell is instantiated, each parameter may be passedan actual expression which in some embodiments may be, withoutlimitation:

a scalar constant value;

a simple expression involving only scalar constants;

an array variable declared as MPX_Comm_t

a parameter of the parent (instantiating) cell; and

a simple expression involving parameters of the parent cell and scalarconstants;

The following exemplary code presents exemplary parameter passing:

  extern mpx_celldef cellB {  mpx_param int NUM_PROCS;  mpx_input DATA; mpx_output RESULT; }; mpx_celldef cellA {  mpx_input IN;  mpx_outputOUT; }; mpx_view viewA( ) {  if (MPX_RANK == MPX_PARALLEL) {    U1:cellB(2, IN, 1000);    U2: cellB(4, 1000, OUT);   }  }

FIG. 11 illustrates use of a configurable cell following the aboveexemplary parameter passing example. The diagram shows the twoinstances, U1 and U2, of cell B inside cell A (strictly, inside thisparticular example, viewA, of cellA). Shaded squares represent processorresources (PEs) and circles represent memory resources (DMRs) availableto those processors. In the illustrated embodiment, cell B is aconfigurable cell whose parameter NUM_PROCS defines the number ofprocessors it uses. Thus, the instance U1 of cell B has two processorsand the instance U2 has four processors (per the declaration above).

Note that the input port of cell A, IN, is directly connected to theinput port, DATA, of the instance U1 of cell B in this example. Theoutput port OUT of cell A is directly connected to the output port,RESULT, of the instance U2 of cell B in this example. Further, theoutput RESULT of instance U1 is connected to the input DATA of U2 via acommunication channel 1000 internal to cell A.

Although the embodiments above have been described in considerabledetail, numerous variations and modifications will become apparent tothose skilled in the art once the above disclosure is fully appreciated.It is intended that the following claims be interpreted to embrace allsuch variations and modifications.

What is claimed is:
 1. A non-transitory computer-readable medium thatstores software code deployable on a multiprocessor array (MPA), whereinthe software code comprises: a cell definition that includes: firstprogram instructions executable to perform a first function; and one ormore first language constructs which are user configurable to specifyone or more parameter inputs; wherein the one or more parameter inputsare user configurable to specify properties of a set of hardwareresources usable to execute the software code, wherein the hardwareresources include a plurality of processors and a plurality of memories;and wherein multiple instances of the first program instructionsspecified by the cell definition are deployable, based on user inputselecting the cell and specifying one or more different parameter inputsfor ones of the instances, in different hardware portions of at leastone MPA to perform the first function for one or more softwareapplications, such that amounts of hardware resources in the respectivehardware portion on which one or more respective instances of the cellare deployed are different and are based on the user-specified one ormore parameter inputs.
 2. The non-transitory computer-readable medium ofclaim 1, where respective first and second instantiations of the cellare deployable on at least one MPA for different respective softwareapplications.
 3. The non-transitory computer-readable medium of claim 1,wherein the respective instances of the cell utilizes different numbersof processors of the MPA based on configuration of the one or moreparameter inputs.
 4. The non-transitory computer-readable medium ofclaim 1, wherein the one or more first language constructs are furtheruser configurable to specify one or more communication ports, whereinthe one or more communication ports are user configurable to specifycommunication with other software code in a software application;wherein instances of the cell comprise respective configurations of theone or more communication ports specifying connectivity of the one ormore communication ports with other software code deployed on the MPA.5. The non-transitory computer-readable medium of claim 4, wherein theone or more communication ports include one or more fabric ports and oneor more shared memory ports.
 6. The non-transitory computer-readablemedium of claim 1, wherein the one or more parameter inputs furthermodify an operation of the first function.
 7. The non-transitorycomputer-readable medium of claim 1, wherein the respectiveinstantiations of the cell utilize different amounts of memory to storetemporary state when performing the first function based onconfiguration of the one or more parameter inputs.
 8. The non-transitorycomputer-readable medium of claim 1, wherein the respectiveinstantiations of the cell utilize different amounts of communicationsresources when performing the first function based on configuration ofthe one or more parameter inputs.
 9. The non-transitorycomputer-readable medium of claim 1, wherein a first instance of thecell is deployed using a portion of hardware resources assigned to alarger cell in which the first instance of the cell is nested.
 10. Thenon-transitory computer-readable medium of claim 1, wherein the one ormore parameter inputs are configurable during execution of the softwarecode to dynamically adjust the set of hardware resources on which atleast one instance of the cell is deployed.
 11. A method for configuringa multiprocessor array (MPA), wherein the MPA comprises hardwareresources including a plurality of processors and a plurality ofmemories, the method comprising: accessing a library of software code ina memory medium, wherein the software code includes a cell definitionthat includes first program instructions executable to perform a firstfunction, wherein the cell definition comprises one or more languageconstructs which specify properties of a set of hardware resources fordeployment of the cell; receiving user input creating multiple instancesof the first program instructions specified by the cell definition foruse in one or more applications, wherein the user input includes inputto the one or more language constructs specifying different amounts ofhardware resources for respective ones of the multiple instances; andwherein the multiple instances of the cell are deployable such thatamounts of hardware resources in respective hardware portions on whichthe respective instances are deployed are different based on the userinput to the one or more language constructs.
 12. The method of claim11, further comprising: deploying the multiple instances of the cell onone or more MPAs.
 13. The method of claim 11, where respective first andsecond instantiations of the cell are deployable on at least one MPAwithin the same software application.
 14. The method of claim 11,wherein the respective instances of the cell utilizes different numbersof processors of the MPA based on configuration of the one or morelanguage constructs.
 15. The method of claim 11, wherein the one or morelanguage constructs are further user configurable to specify one or morecommunication ports, wherein the one or more communication ports areuser configurable to specify communication with other software code in asoftware application; wherein instances of the cell comprise respectiveconfigurations of the one or more communication ports specifyingconnectivity of the one or more communication ports with other softwarecode deployed on the MPA.
 16. A system, comprising: one or moreprocessors; and one or more memories having program instructions storedthereon that are executable by the one or more processors to causeoperations comprising: deploying software code on a multiprocessor array(MPA), wherein the software code comprises: a cell definition thatincludes: first program instructions executable to perform a firstfunction; and one or more first language constructs which are userconfigurable to specify one or more parameter inputs; wherein the one ormore parameter inputs are user configurable to specify properties of aset of hardware resources usable to execute the software code, whereinthe hardware resources include a plurality of processors and a pluralityof memories; and wherein multiple instances of the first programinstructions specified by the cell definition are deployable, based onuser input selecting the cell and specifying one or more differentparameter inputs for ones of the instances, in different hardwareportions of at least one MPA to perform the first function in one ormore software applications; and wherein amounts of hardware resources inthe respective hardware portion on which one or more respectiveinstances of the cell are deployed are different and are based on theuser-specified one or more parameter inputs.
 17. The system of claim 16,further comprising: the MPA.
 18. The system of claim 16, wherein the oneor more parameter inputs further modify an operation of the firstfunction.
 19. The system of claim 16, wherein the respectiveinstantiations of the cell utilize different amounts of memory to storetemporary state when performing the first function based onconfiguration of the one or more parameter inputs.
 20. The system ofclaim 16, wherein the respective instantiations of the cell utilizedifferent amounts of communications resources when performing the firstfunction based on configuration of the one or more parameter inputs.